//
//  LinearList.h
//  数据结构
//
//  Created by 吴高烽 on 2018/4/11.
//  Copyright © 2018年 吴高烽. All rights reserved.
//
#ifndef LinearList_h
#define LinearList_h

#include "PrefixHeader.pch"

// 封装性 预编译指令
#ifndef LINEARLIST_STRUCT
// 使用指针就无法比较真实的内容了（类型）
typedef void*  LinearListNodeValue;
typedef void   LinearList;
#endif
//enum bl {true = 1,false = 0};
/**
 通过链表容量来初始化链表

 @param capacity 链表的容量
 @return 链表的头指针
 */
LinearList *listCreat(int capacity);
void listAdd(LinearList *list , LinearListNodeValue value);

/**
 清空链表数据

 @param list 要清空链表的头指针
 */
void listClear(LinearList *list);

/**
 获取链表的长度

 @param list 要测量的链表
 @return 返回链表的长度
 */
int listLength(LinearList *list);
/**
 按照索引查找链表上对应位置的节点

 @param list 所查找的链表参数
 @param index 索引位置参数
 @return 索引节点
 */
LinearListNodeValue listGet(LinearList *list , int index);

/// 判断是否为空链表
/// @param list 链表指针
bool Empty(LinearList *list);

/// 内容比较
/// @param list 链表指针
/// @param value 比较的值
int locateElem(LinearList *list, LinearListNodeValue value);
//void listInsert(LinearList *list, int index, LinearListNodeValue value)
void listgPrint(LinearList *list);

//    使用了二级指针
void listDelete(LinearList *list,int index, LinearListNodeValue* value);
void listDlte(LinearList *list,int index, LinearListNodeValue value);

#endif /* LinearList_h */
